package rescsa.gob.pe.seguridad.service;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import rescsa.gob.pe.seguridad.bean.PaginaBEAN;
import rescsa.gob.pe.seguridad.bean.RolBEAN;
import rescsa.gob.pe.seguridad.bean.UsuarioBEAN;
import rescsa.gob.pe.seguridad.dao.PaginaDAO;
import rescsa.gob.pe.seguridad.dao.RolDAO;
import rescsa.gob.pe.seguridad.dao.UsuarioDAO;


@Service
public class SeguridadService {
	
	@Autowired
	private UsuarioDAO usuarioDAO;
	
	@Autowired
	private RolDAO rolDAO;
	
	@Autowired
	private PaginaDAO paginaDAO;
	
	
	
	
//	obtener los datos del usuario
	public UsuarioBEAN obtenerUsuario(UsuarioBEAN user){
		List<UsuarioBEAN> lista = usuarioDAO.listar(user);
		UsuarioBEAN usuario = new UsuarioBEAN();
		if (lista.size()==1){
			usuario = lista.get(0);
		}else{
			usuario = null;
		}
		return usuario;
	}
	
	
	public List<RolBEAN> rolesUsuario(UsuarioBEAN user){
		return rolDAO.listar(user);
	}
	
	
//	obtener rol
	public RolBEAN obtenerRol(RolBEAN rol){
		List<RolBEAN> lista = rolDAO.listar(rol);
		RolBEAN ro = new RolBEAN();
		if (lista.size()==1){
			ro = lista.get(0);
		}else{
			ro = null;
		}
		return ro;
	}
	
	
//	paginas por rol
	public List<PaginaBEAN> paginasRol(RolBEAN rol ){
//		primero obtengo la lista con jerarquia 1
		int nivel;
		int tamanio;
		int padre;
		List<PaginaBEAN> listaPaginas= new ArrayList<PaginaBEAN>();
		List<PaginaBEAN> listaPaginas2= new ArrayList<PaginaBEAN>();
		List<PaginaBEAN> listaPaginas3= new ArrayList<PaginaBEAN>();
		List<PaginaBEAN> listaPaginas4= new ArrayList<PaginaBEAN>();
		
		int minimonivel= paginaDAO.obtenerMenorNivel(rol);
		int padreObtenido= paginaDAO.obtenerPadre(rol, minimonivel);
		
		
		
		//primero obtenemos todas las paginas con jerarquia 1
		 nivel=minimonivel;
		 padre=padreObtenido;
		 
//		 obtengo la lista de paginas de primer nivel
		 listaPaginas = paginaDAO.listarPorRol(rol, nivel, padre);
		 tamanio = listaPaginas.size();
		 
		 
		 if (tamanio>0){
			 for(PaginaBEAN p : listaPaginas){
//				 System.out.println("1-\tEN EL PRIMER NIVEL /"+p.getN_nombre());
				 nivel =minimonivel+1;
//				 padre= p.getId_pagina();
				 padre= p.getC_pagina();
				 
//				 lista de paginas de segundo nivel
				 listaPaginas2=paginaDAO.listarPorRol(rol, nivel, padre);
				 p.setListaPagina(listaPaginas2);
				 
				 tamanio = listaPaginas2.size();
				 if(tamanio>0){
					 for(PaginaBEAN p2 : listaPaginas2){
						 
//						 System.out.println("2-\t\tEN EL SEGUNDO NIVEL /"+p2.getN_nombre());
						 nivel =minimonivel+2;
//						 padre= p2.getId_pagina();
						 padre= p2.getC_pagina();
						 
						 listaPaginas3=paginaDAO.listarPorRol(rol, nivel, padre);
						 p2.setListaPagina(listaPaginas3);
						 tamanio= listaPaginas3.size();
						 if(tamanio>0){
							 for(PaginaBEAN p3 : listaPaginas3){
								
								 nivel = minimonivel+3;
								 padre= p3.getC_pagina();
								 listaPaginas4=paginaDAO.listarPorRol(rol, nivel, padre);
								 p3.setListaPagina(listaPaginas4);
								 tamanio = listaPaginas4.size();
								 
//								 System.out.println("3-\t\t\tEN EL TERCER NIVEL  /"+p3.getN_nombre() +" / padre:"+padre+" / minimo "+nivel);
//								 if(tamanio>0){
//									 for(PaginaDTO p4 : listaPaginas4){
//										 System.out.println("4-\t\t\t\t EN EL CUARTO NIVEL  /"+p4.getN_nombre());
//									 }
//								 }
								 
							 }
						 }
					 }
				 }
			 }
		 }
			 
		 return listaPaginas;
	}
	
	
}
